/**
 * @file 工单操作-算账
 * @author yangjiangming <449654337@qq.com>
 * @date 2018-12-10 20:13:16
 */
layui.extend({
    oms_comment_modifier: 'comment/zs/zmn.oms.comment.modifier'
}).define(['layer', 'form', 'rate', 'oms_comment_modifier', '$http'], function (exports) {

    var $ = layui.$;
    var form = layui.form;
    var rate = layui.rate;
    var layer = layui.layer;
    var $http = layui.$http;

    var modifier = layui.oms_comment_modifier.modifier;

    var ALREADY_EVALUATED = 2;

    var isEvaluated = replyVisitVO.commentStatus === ALREADY_EVALUATED;

    var SAVE_REPLY_URL = '/work/modify/save/reply/visit.action';

    /**
     * 验证表单
     */
    function initFormVerify () {
        form.verify({
            length: function (value) {
                if (value.length > 1000) {
                    return '评价内容不能大于1000字'
                }
            }
        })
    }

    /**
     * 提示消息;
     * @param str {string} 显示的消息
     */
    function toast(str) {
        layer.msg(str);
    }

    /**
     * 提交条件检查
     * @type {Function}
     */
    var preSubmissionVerification = (function () {
        /**
         * 判断订单评价是否有复选框被选中;
         * @param ele{string}复选框的dom元素
         * @returns {boolean}
         */
        function isCheckReply(ele) {
            return !($(ele).find(':checked').length === 0);
        }

        /**
         * 判断文本域是否为空
         * @param ele{string} textarae的dom元素
         * @returns {boolean}
         */
        function isTextarae(ele) {
            var a = $(ele).val();
            return !!a;
        }

        /**
         * 订单评价/订单选择评价 必有其一
         * @returns {boolean}
         */
        function alternativerReply() {
            return isCheckReply("#orderEvaluation") || isTextarae(".d-reply-textarea");
        }

        /**
         * 回访选择内容/回访填入内容 必有其一
         * @returns {boolean}
         */
        function alternativerVisit() {
            return isCheckReply("#returnVisitContent") || isTextarae(".d-visit-textarae");
        }

        return function () {
            var star = $('input[name=score]').val();
            if (replyVisitVO.shouldComment == 2) {
                if (star < 1 && !isEvaluated) {
                    toast('请选择评星');
                    return false;
                }

                if (star < 5) {//小于5星 订单选择/订单评价至少一个
                    if (!alternativerReply() && !isEvaluated) {
                        toast('请选择订单评价或填写订单评价');
                        return false;
                    }
                }
            }
            if (!alternativerVisit()) {
                toast('请选择回访内容或填写回访内容');
                return false;
            }
            return true;
        };
    })();

    function _getInputTitleByNameAndValue (name, value) {
        return $('input[name="' + name + '"][value="' + value + '"]').attr('title');
    }

    /**
     * 提交字段处理
     * @param data
     */
    function _normalizeSubmitParams (dataObj) {
        var params = {
            commentCodeMapList: [],
            replyVisitCodeMapList: []
        };

        $(dataObj.form).serializeArray().forEach(({ name, value }) => {
            if (name === 'commentCodeMapList') {
                params.commentCodeMapList.push({
                    text: _getInputTitleByNameAndValue(name, value),
                    value: value
                });

                return;
            }

            if (name === 'replyVisitCodeMapList') {
                params.replyVisitCodeMapList.push({
                    text: _getInputTitleByNameAndValue(name, value),
                    value: value
                });

                return;
            }

            params[name] = value;

        });

        return params;
    }

    /**
     * 提交
     * @param data
     */
    function submit (params, button) {
        $http.lockSave(SAVE_REPLY_URL, params, button).then(function () {
            layer.msg('操作成功', { icon: 1, time: 1000 }, function () {
                modifier.goOperateHome();
            });
        }, (msg) => {
            layer.msg(msg);
        });
    }


    /**
     * 初始化页面评分组件
     */
    function _initCommentStar () {
        rate.render({
            elem: '#rate',
            theme: '#f88b00',
            value: replyVisitVO.score,
            readonly: replyVisitVO.score !== null,
            choose: function (val) {
                $('input[name=score]').val(val);
            }
        });
    }

    /**
     * 初始化页面事件
     */
    function initEvent() {
        // 监听保存按钮
        form.on('submit()', function (data) {
            if (!preSubmissionVerification()) {
                return false;
            }
            var params = _normalizeSubmitParams(data);

            submit(params, data.elem);
            return false;
        });
    }

    /**
     * 初始化页面
     */
    function initPage() {
        modifier.initOperatePage();

        _initCommentStar();

        // 验证表单
        initFormVerify();
    }

    // 程序入口
    function init() {
        // 初始化事件
        initEvent();

        // 初始化页面
        initPage();
    }

    // 初始化
    init();

    exports('oms_comment_modify_replyvisit');
});
